package com.yuanzi.base.redis;

import java.util.List;
import java.util.Map;
import java.util.Set;

public interface IRedisService {

	/**
	 * 存储string类型
	 * @author chengshx
	 * @param key
	 * @param value
	 * @return
	 */
	void set(String key, String value);

	/**
	 * 存储string类型，并设置key的有效时间
	 * @author chengshx
	 * @param key
	 * @param value
	 * @param seconds 过期时间，单位秒，为null不过期
	 * @return
	 */
	void setEx(String key, String value, Integer seconds);

	/**
	 * 获取string类型的值
	 * @author chengshx
	 * @param key
	 * @return
	 */
	String get(String key);

	/**
	 * 批量获取String类型的值
	 * @author chengshx
	 * @param key
	 * @param fields
	 * @return
	 */
	List<String> mget(String... keys);

	/**
	 * 删除key
	 * @author chengshx
	 * @param keys
	 */
	void del(String... keys);

	/**
	 * 设置key的过期时间
	 * @author chengshx
	 * @param key
	 * @param seconds 过期时间，单位秒
	 * @return
	 */
	void expire(String key, Integer seconds);

	/**
	 * 存储hash类型的值
	 * @author chengshx
	 * @param key hash表的名称
	 * @param field
	 * @param value
	 * @return
	 */
	void hset(String key, String field, String value);

	/**
	 * 批量存储hash类型的值
	 * @author chengshx
	 * @param key hash表的名称
	 * @param hash
	 * @return
	 */
	void hmset(String key, Map<String, String> hash);

	/**
	 * 获取hash类型的值
	 * @author chengshx
	 * @param key
	 * @param filed
	 * @return
	 */
	String hget(String key, String filed);

	/**
	 * 批量获取hash类型的值
	 * @author chengshx
	 * @param key
	 * @param fields
	 * @return
	 */
	List<String> hmget(String key, String... fields);

	/**
	 * 删除hash类型的值
	 * @author chengshx
	 * @param key
	 * @param fields
	 */
	void hdel(String key, String... fields);
	
	/**
	 * 获取hash的所有field
	 * @author chengshx
	 * @date 2017年7月12日
	 *
	 * @param key
	 * @return
	 */
	Set<String> hkeys(String key);
	
	/**
	 * 获取hash的所有value
	 * @author chengshx
	 * @date 2017年7月12日
	 *
	 * @param key
	 * @return
	 */
	List<String> hvals(String key);

	/**
	 * 递增num，num<0时递减
	 * @author chengshx
	 * @date 2017年8月7日
	 * @param key
	 * @param num
	 */
	public void incrby(String key, Long num);
	
	/**
	 * 获取hash的所有field和value
	 * @author chengshx
	 * @date 2017年9月25日
	 * @param key
	 * @return
	 */
	public Map<String, String> hgetAll(String key);
	
	/**
	 * 添加member
	 * @author chengshx
	 * @date 2017年12月25日
	 * @param key
	 * @param members
	 */
	public void sadd(String key, String... members);
	
	/**
	 * 判断成员是否存在
	 * @author chengshx
	 * @date 2017年12月25日
	 * @param key
	 * @param member
	 * @return
	 */
	public Boolean sismember(String key, String member);
	
	/**
	 * 设置key的确切失效时间
	 * @param key
	 * @param timestamp unix时间戳
	 * @return
	 */
	public Long setExpireAt(String key, Long unixTime);
	
	/**
	 * 获取member的集合
	 * @param key
	 * @return
	 * @return Set<String>
	 * @author choijung
	 */
	public Set<String> smembers(String key);
}